package com.lemo.smart.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 反射工具类
 * Created by 罗选通 on 2017/12/22.
 */
public class ReflectionUtil {

  private static final Logger LOGGER = LoggerFactory.getLogger(ReflectionUtil.class);

  /**
   * 创建实例
   */
  public static Object newInstance(Class<?> cls) {
    Object instance;
    try {
      instance = cls.newInstance();
    } catch (Exception e) {
      LOGGER.error("new instance failure", e);
      throw new RuntimeException(e);
    }
    return instance;
  }

  /**
   * 调用方法
   */
  public static Object invokeMethod(Object obj, Method method, Object... args) {
    Object result;
    try {
      result = method.invoke(obj, args);
    } catch (Exception e) {
      LOGGER.error("invoke method failure", e);
      throw new RuntimeException(e);
    }
    return result;
  }

  /**
   * 设置成员变量的值
   */
  public static void setField(Object obj, Field field, Object value) {
    field.setAccessible(true);
    try {
      field.set(obj, value);
    } catch (Exception e) {
      LOGGER.error("set field failure", e);
      throw new RuntimeException(e);
    }
  }


}
